
/** 打开数据库，是一个异步操作，但会立刻返回一个 IDBOpenDBRequest  对象
 *  @param {String} databaseName     数据库的名称，如果指定数据库不存在，则会创建新的数据库
 *  @param {Int} version          数据库版本。如果省略，打开已有数据库时，默认为当前版本，创建新数据库时，默认为1
 *  @returns {IDBRequest}
 */
var request = window.indexedDB.open('test', 2)
console.log(request)

//返回的 IDNRequest 对象可以通过三种事件 error,success,upgradeneeded,blocked(上一次数据库连接未关闭) 处理打开数据库的结果

//打开数据库失败
request.onerror = e=>{
    console.log('数据库打开报错')
}

//打开数据库成功，可以通过 IDBRequest 对象的 result 属性拿到数据库对象
request.onsuccess = e=>{
    console.log('数据库打开成功')
}

// 如果打开数据库时指定的版本号大于数据库实际版本号，就会发生数据库升级事件 upgradeneeded
// 新建一个数据库也会出发这个事件，因为版本从无到有
var db
request.onupgradeneeded = e=>{
    db = event.target.result
    console.log('数据库升级成功')
}


// request.onupgradeneeded = e=>{
//     db = event.target.result
//     //在打开的数据库中新增一张 person 的表格，逐渐是 id (先判断一下这张表格是否存在)
//     if(!db.objectStoreNames.contains('person')){
//         var objectStore = db.createObjectStore('person',{keyPath: 'id'})
//     }
// }

/** 创建表
 *  @param {String} 表名
 *  @param {Object} 主键配置
 */
var objectStore = db.createObjectStore(
    'person',
    {autoIncrement: true}
)

/** 新建索引
 * @param {String} 索引名称
 * @param {String} 索引所在的属性
 * @param {Object} 配置对象
 */
objectStore.createIndex()


/** 新增数据（需要通过事务完成）
 * @param {Object} 数据的对象
 */
function add(){
    var request = db.transaction(['person'], 'readwrite').objectStore('person').add({id:1, name:'张三', email:"zhangsan@example.com"})
    request.onsuccess = e=>{
        console.log('数据写入成功')
    }
    request.onerror = e=>{
        console.log('数据写入失败')
    }
}


/** 读取数据
 * @param 主键的值
 */
function read(){
    var transaction = db.transaction(['person'])
    var objectStore = transaction.objectStore('person')
    var request = objectStore.get(1)

    request.onerror = e=>{
        console.log('事务失败')
    }
    request.onsuccess = e=>{
        if(request.result){
            console.log('Name:'+request.result.name)
            console.log('Age:'+request.result.age)
            console.log('Email:'+request.result.email)
        }else{
            console.log('未获得数据记录')
        }
    }
}

/** 打开表
 * @param {Array} 打开的表
 */
objectStore()


/**
 * 遍历指针数据，使用指针对象 IDBCursor
 */
function readAll(){
    var objectStore = db.transaction('person').objectStore('person')
    objectStore.openCursor().onsuccess = e=>{
        var cursor = e.target.result
        if(cursor){
            console.log('Id:'+cursor.key)
            console.log('Name:'+cursor.value.name)
            console.log('Age:'+cursor.value.age)
            console.log('Email'+cursor.value.email)
            cursor.continue()
        }else{
            console.log("没有更多数据了！")
        }
    }
}


/**
 * @param {Object} 一条数据
 */
function update(){
    var request = db.transaction(['person'], 'readwrite').objectStore('person').put({id:1, name:'李四', age:35, email:'lisi@example.con'})
    request.onsuccess = e=>{
        console.log("数据更新成功")
    }
    request.onerror = e=>{
        console.log("数据更新失败")
    }
}


/**
 * @param 索引
 */
function remove(){
    var request = db.transaction(['person'], 'readwrite').objectStore('person').delete(1)
    request.onsuccess = e=>{
        console.log('数据删除成功')
    }
}

